home *** CD-ROM | disk | FTP | other *** search
- IDT 'LMS'
- TITL 'LMS Algorithm AutoNotcher/DeNoiser'
-
- * COPYRIGHT (c) 1992 BY DAVID L. HERSHBERGER, W9GR
- * ALL RIGHTS RESERVED
-
- * NONCOMMERCIAL USE BY RADIO AMATEURS AND ELECTRONIC HOBBYISTS IS PERMITTED.
- * THIS IS NOT PUBLIC DOMAIN SOFTWARE.
- * THIS SOFTWARE MAY NOT BE USED WITHOUT A LICENSE AS THE BASIS
- * FOR MANUFACTURE OF COMMERCIAL PRODUCTS.
- * COMMERCIAL USE OF THIS SOFTWARE REQUIRES A LICENSE.
- * LICENSING INQUIRIES MAY BE DIRECTED TO:
- * QUANTICS
- * P. O. BOX 2163
- * NEVADA CITY, CALIFORNIA 95959-2163
-
- * THIS TMS320C10 ASSEMBLY LANGUAGE PROGRAM IS WRITTEN FOR THE
- * W9GR QUANTICS DIGITAL SIGNAL PROCESSOR DESCRIBED ON PAGE 43 OF
- * THE SEPTEMBER 1992 ISSUE OF QST MAGAZINE.
- * ("LOW COST DIGITAL SIGNAL PROCESSING FOR THE RADIO AMATEUR"
- * BY DAVE HERSHBERGER, W9GR)
- * FURTHER INFORMATION ON THE LMS ALGORITHM AS IMPLEMENTED HERE IS
- * GIVEN IN THE ARTICLE "USING THE LMS ALGORITHM FOR QRM AND QRN
- * REDUCTION" BY DR. STEVEN E. REYER, WA9VNJ, AND DAVID L. HERSHBERGER, W9GR,
- * IN THE SEPTEMBER 1992 ISSUE OF QEX MAGAZINE.
-
- * THE W9GR / QUANTICS DIGITAL SIGNAL PROCESSOR IS AVAILABLE IN KIT FORM
- * (INCLUDING ALL PC BOARD MOUNTED COMPONENTS BUT NO ENCLOSURE OR POWER SUPPLY)
- * FROM:
- * QUANTICS
- * P. O. BOX 2163
- * NEVADA CITY, CALIFORNIA 95959
-
- * Filter length = 24 Delay length = 65
- * Both notcher and denoiser functions, selected by BIO switch
- * LMS coefficients are decayed one at a time per program loop
- * Each loop uses 301 instruction cycles
- * FS = 5 MHZ / 301 = 16611 HZ
-
- * BIO=1 > AUTOMATIC NOTCH
- * BIO=0 > DENOISING FUNCTION
-
- DSEG
-
- DORG >00 PAGE 0
-
- NBETA BSS 1 BETA VALUE (NOTCH)
- NDECAY BSS 1 DECAY VALUE (NOTCH) (>8000 => NO DECAY)
- CBETA BSS 1 BETA VALUE (DENOISE)
- CDECAY BSS 1 DECAY VALUE (DENOISE) (>8000 => NO DECAY)
- ONES BSS 1 ALL ONES FOR EX-OR
-
- * END OF PAGE 0 TABLE READ VARIABLES
-
- D BSS 65 INPUT SIGNAL DELAY (NOTCH)
- X BSS 24 FILTER DELAY (NOTCH)
- W BSS 24 LMS COEFFICIENTS
- BETA BSS 1 BETA VALUE (NOTCH)
- DECAY BSS 1 DECAY VALUE (>8000 => NO DECAY)
- ONE BSS 1 CONSTANT 1
- Y BSS 1 WIENER FIR FILTER OUTPUT
- E BSS 1 ERROR SIGNAL
- EBETA BSS 1 E*BETA
- SQUARE BSS 1 INPUT SQUARED
- LED BSS 1 LED DISPLAY
- TEMP BSS 1 TEMPORARY STORAGE
- HPFOUT BSS 1 HPF OUTPUT
-
- DORG >80 PAGE 1
-
- HPF BSS 5 HPF NETWORK COEFFICIENTS
- MASK BSS 1 A/D, D/A 2'S COMPLEMENT CONVERSION MASK
- LSBMAX BSS 1 8 BIT MASK
- ONE1 BSS 1 CONSTANT 1
-
- * END OF PAGE 1 TABLE READ VARIABLES
-
- INP BSS 3 INPUT DELAY, USED FOR HPF
- DENOM BSS 2 INPUT HPF DENOMINATOR DELAY
-
- TOP EQU >8F
- NFIR EQU 24 LENGTH OF WIENER FIR FILTER
- NDEL EQU 65 LONG DELAY FOR NOTCHER
- SDEL EQU 1 SHORT DELAY FOR DENOISER MODE
-
- DEND
-
- PSEG
-
- B START
- INTRPT B START
- START DINT
- SOVM
- LDPK 0
- LARP AR0
-
- * ZERO ALL DATA MEMORY LOCATIONS
-
- ZAC
- LARK AR0,TOP
- CLEAR SACL *,0
- BANZ CLEAR
-
- * STORE AWAY "1" VALUE
-
- LACK 1
- SACL ONE
-
- * GET READY FOR TABLE READ, PAGE 0
-
- LARK AR0,ONES ONES: LAST TABLE ENTRY
- LT ONE
- MPYK TBLEND
- PAC
- LARP AR0
-
- * MOVE CONSTANTS TO DATA MEMORY, PAGE 0
-
- MOVTBL TBLR *
- SUB ONE
- BANZ MOVTBL
-
- * GET READY FOR TABLE READ, PAGE 1
-
- LARK AR1,ONE1 ONE1: LAST TABLE ENTRY
- LARK AR0,TBLEND1-TABLE1
- LT ONE
- MPYK TBLEND1
- PAC
-
- * MOVE CONSTANTS TO DATA MEMORY, PAGE 1
-
- LARP AR1
- MOVTBL1 LDPK 1
- LARP AR1
- TBLR *-,AR0
- LDPK 0
- SUB ONE
- BANZ MOVTBL1
-
- LARP AR0
- LDPK 0
-
- LARP AR0
- LARK AR0,NDEL-1
- LARK AR1,NFIR-1
-
- * MAIN PROGRAM LOOP
-
- AGAIN LDPK 1
- IN INP,PA1 INPUT SAMPLE FROM A/D
- OUT ONE1,PA0 START NEXT CONVERSION
-
- ZALS INP PUT SAMPLE INTO ACC-L
- XOR MASK A/D OFFSET BINARY=>2'S COMP
- AND LSBMAX CLEAR ALL LOW ORDER BITS (NOISE)
- SACL INP PUT BACK
-
- * INPUT HIGHPASS FILTER:
-
- * NUMERATOR:
-
- ZAC
- LT INP+2
- MPY HPF+2
- LTD INP+1
- MPY HPF+1
- LTD INP
- MPY HPF
-
- * DENOMINATOR:
-
- LTA DENOM+1
- MPY HPF+4
- LTD DENOM
- MPY HPF+3
- APAC
-
- ADD ONE1,11 ADD 0.5 TO ROUND
- SACH DENOM,4 SAVE WITH SHIFT
- LDPK 0
- SACH HPFOUT,4 STORE ON PAGE 0 TOO
-
- SAR AR0,TEMP STORE AR0
- LACK D LOAD ACCUM WITH OFFSET
- ADD TEMP ADD AR0 VALUE
- SACL LED STORE USING LED AS TEMP LOCATION
- LAR AR0,LED PUT INTO AR0
- ZALH HPFOUT LOAD ACCUM WITH HPF OUTPUT
- SACH *,0 SAVE HPF OUTPUT IN DELAY
- LAR AR0,TEMP RESTORE AR0
-
- * DECAY JUST ONE LMS COEFFICIENT (NOTCH)
- * USE AR1 TO POINT TO COEFFICIENT TO BE DECAYED
- * TEMPORARILY ADD W TO AR0 CONTENTS THEN RESTORE
-
- LARP AR1 USE AR1
- SAR AR1,TEMP STORE AR1
- LACK W LOAD ACCUM WITH OFFSET
- ADD TEMP ADD AR1 VALUE
- SACL LED STORE USING LED AS TEMP LOCATION
- LAR AR1,LED PUT INTO AR1
- LT DECAY
- MPY * MULTIPLY
- PAC
- SACH *,1 PUT BACK
- LAR AR1,TEMP RESTORE AR1
- BANZ ARDECAY
- LARK AR1,NFIR-1
- B BARGRA
- ARDECAY NOP NOPS TO MAINTAIN SAMPLING RATE
- NOP
- NOP
-
- * SQUARE INPUT FOR LED DISPLAY, 3DB/SEGMENT
-
- BARGRA ZALH HPFOUT
- SACH TEMP
- LT TEMP
- MPY TEMP
- PAC
- SACH TEMP
- SUBH SQUARE
- BGZ PEAK
- ZALH SQUARE
- SUBH ONE
- ABS
- SACH SQUARE
- B DISPLAY
-
- PEAK ZALH TEMP
- SACH SQUARE
- NOP NOPS TO MAINTAIN SAMPLING RATE
- NOP
- NOP
- NOP
-
- * CONVERT TO DISPLAY BY BITWISE OR
-
- DISPLAY LAC SQUARE,12
- SACH LED
-
- LAC SQUARE,11
- SACH TEMP
- ZALS TEMP
- OR LED
- SACL LED
-
- LAC SQUARE,10
- SACH TEMP
- ZALS TEMP
- OR LED
- SACL LED
-
- LAC SQUARE,9
- SACH TEMP
- ZALS TEMP
- OR LED
- SACL LED
-
- LAC SQUARE,8
- SACH TEMP
- ZALS TEMP
- OR LED
- SACL LED
-
- LAC SQUARE,7
- SACH TEMP
- ZALS TEMP
- OR LED
- SACL LED
-
- LAC SQUARE,6
- SACH TEMP
- ZALS TEMP
- OR LED
- SACL LED
-
- LAC SQUARE,5
- SACH TEMP
- ZALS TEMP
- OR LED
- SACL LED
-
- LAC SQUARE,4
- SACH TEMP
- ZALS TEMP
- OR LED
- SACL LED
-
- LAC SQUARE,3
- SACH TEMP
- ZALS TEMP
- OR LED
-
- XOR ONES
- SACL LED
-
- OUT LED,PA2
-
- * DATA DELAY MOVE
-
- LARP AR0
- BANZ WRAP
- BIOZ DENAR0 TEST FOR NOTCH OR DENOISE
- LARK AR0,NDEL-1 LOAD AR0 FOR LONG (AUTONOTCH) DELAY
- B TWEAK
- DENAR0 LARK AR0,SDEL-1 LOAD AR0 FOR SHORT (DENOISER) DELAY
- B TWEAK
- WRAP NOP NOPS TO MAINTAIN SAMPLING RATE
- NOP
- NOP
- NOP
- NOP
-
- * TWEAK NOTCH COEFFICIENTS, BEFORE DOING FILTERING/DATA MOVE:
-
- TWEAK LT EBETA
-
- MPY X+23
- PAC
- ADDH W+23
- SACH W+23
-
- MPY X+22
- PAC
- ADDH W+22
- SACH W+22
-
- MPY X+21
- PAC
- ADDH W+21
- SACH W+21
-
- MPY X+20
- PAC
- ADDH W+20
- SACH W+20
-
- MPY X+19
- PAC
- ADDH W+19
- SACH W+19
-
- MPY X+18
- PAC
- ADDH W+18
- SACH W+18
-
- MPY X+17
- PAC
- ADDH W+17
- SACH W+17
-
- MPY X+16
- PAC
- ADDH W+16
- SACH W+16
-
- MPY X+15
- PAC
- ADDH W+15
- SACH W+15
-
- MPY X+14
- PAC
- ADDH W+14
- SACH W+14
-
- MPY X+13
- PAC
- ADDH W+13
- SACH W+13
-
- MPY X+12
- PAC
- ADDH W+12
- SACH W+12
-
- MPY X+11
- PAC
- ADDH W+11
- SACH W+11
-
- MPY X+10
- PAC
- ADDH W+10
- SACH W+10
-
- MPY X+9
- PAC
- ADDH W+9
- SACH W+9
-
- MPY X+8
- PAC
- ADDH W+8
- SACH W+8
-
- MPY X+7
- PAC
- ADDH W+7
- SACH W+7
-
- MPY X+6
- PAC
- ADDH W+6
- SACH W+6
-
- MPY X+5
- PAC
- ADDH W+5
- SACH W+5
-
- MPY X+4
- PAC
- ADDH W+4
- SACH W+4
-
- MPY X+3
- PAC
- ADDH W+3
- SACH W+3
-
- MPY X+2
- PAC
- ADDH W+2
- SACH W+2
-
- MPY X+1
- PAC
- ADDH W+1
- SACH W+1
-
- MPY X
- PAC
- ADDH W
- SACH W
-
- * NOTCHER/DENOISER FIR WIENER FILTER:
-
- ZAC
- LT X+23
- MPY W+23
- LTD X+22
- MPY W+22
- LTD X+21
- MPY W+21
- LTD X+20
- MPY W+20
- LTD X+19
- MPY W+19
- LTD X+18
- MPY W+18
- LTD X+17
- MPY W+17
- LTD X+16
- MPY W+16
- LTD X+15
- MPY W+15
- LTD X+14
- MPY W+14
- LTD X+13
- MPY W+13
- LTD X+12
- MPY W+12
- LTD X+11
- MPY W+11
- LTD X+10
- MPY W+10
- LTD X+9
- MPY W+9
- LTD X+8
- MPY W+8
- LTD X+7
- MPY W+7
- LTD X+6
- MPY W+6
- LTD X+5
- MPY W+5
- LTD X+4
- MPY W+4
- LTD X+3
- MPY W+3
- LTD X+2
- MPY W+2
- LTD X+1
- MPY W+1
- LTD X
- MPY W
- APAC
- ADD ONE,15 ADD 0.5 TO ROUND
- SACH Y,0
-
- * E = D - Y
-
- ZALH HPFOUT
- SUBH Y
- SACH E
-
- LT E
- MPY BETA
- PAC
- SACH EBETA
-
- * TAKE DATA FROM DELAY LINE AND PUT IT IN FIR FILTER
-
- SAR AR0,TEMP STORE AR0
- LACK D LOAD ACCUM WITH OFFSET
- ADD TEMP ADD AR0 VALUE
- SACL LED STORE USING LED AS TEMP LOCATION
- LAR AR0,LED PUT INTO AR0
- ZALH *
- SACH X
- LAR AR0,TEMP RESTORE AR0
-
- BIOZ DENOISE TEST FOR NOTCH OR DENOISE
-
- * OUTPUT NOTCHED SIGNAL TO DAC
-
- ZALS E NOTCHED OUTPUT SIGNAL
- LDPK 1
- XOR MASK 2'S COMP=>OFFSET BINARY
- LDPK 0
- SACL TEMP SAVE IT
- OUT TEMP,PA1 TO D/A CONV
-
- * LOAD NOTCH VALUES FOR DECAY AND BETA
-
- ZALH NDECAY
- SACH DECAY
- ZALH NBETA
- SACH BETA
-
- B AGAIN
-
- * OUTPUT DENOISED SIGNAL TO DAC
-
- DENOISE ZALS Y CORRELATOR (DENOISED)
- LDPK 1
- XOR MASK 2'S COMP=>OFFSET BINARY
- LDPK 0
- SACL TEMP SAVE IT
- OUT TEMP,PA1 TO D/A CONV
-
- * LOAD DENOISE VALUES FOR DECAY AND BETA
-
- ZALH CDECAY
- SACH DECAY
- ZALH CBETA
- SACH BETA
-
- B AGAIN
-
-
- TABLE DATA >1000 NOTCHER BETA VALUE
- DATA >7FE4 NOTCHER DECAY VALUE (>8000 => NO DECAY)
- DATA >1800 DENOISE BETA VALUE
- DATA >7D80 DENOISE DECAY VALUE (>8000 => NO DECAY)
- TBLEND DATA ?1111111111111111 ONES
-
- * 0.5 DB/40 DB ELLIPTIC IIR HPF
- * PASS 300 HZ REJ 35 HZ
- * HPF COEFFICIENTS:
- TABLE1 DATA 3644,-7288,3644,7700,-3644
- DATA ?1000000000000000 A/D, D/A 2'S COMPLEMENT CONVERSION MASK
- DATA ?1111111100000000 A/D 8 BIT MASK
- TBLEND1 DATA ?0000000000000001 CONSTANT ONE
-
- * COPYRIGHT NOTICE
-
- * ASCII DATA STRING EMBEDDED IN THE FOLLOWING DATA STATEMENTS:
- * Copyright (c) 1992 by David L. Hershberger W9GR,
- * DBA Quantics, P. O. Box 2163, Nevada City, CA 95959-2163.
- * All rights reserved.
- DATA >4343,>6F6F,>7070,>7979,>7272,>6969,>6767,>6868
- DATA >7474,>2020,>2828,>6363,>2929,>2020,>3131,>3939
- DATA >3939,>3232,>2020,>6262,>7979,>2020,>4444,>6161
- DATA >7676,>6969,>6464,>2020,>4C4C,>2E2E,>2020,>4848
- DATA >6565,>7272,>7373,>6868,>6262,>6565,>7272,>6767
- DATA >6565,>7272,>2020,>5757,>3939,>4747,>5252,>2C2C
- DATA >2020,>4444,>4242,>4141,>2020,>5151,>7575,>6161
- DATA >6E6E,>7474,>6969,>6363,>7373,>2C2C,>2020,>5050
- DATA >2E2E,>2020,>4F4F,>2E2E,>2020,>4242,>6F6F,>7878
- DATA >2020,>3232,>3131,>3636,>3333,>2C2C,>2020,>4E4E
- DATA >6565,>7676,>6161,>6464,>6161,>2020,>4343,>6969
- DATA >7474,>7979,>2C2C,>2020,>4343,>4141,>2020,>3939
- DATA >3535,>3939,>3535,>3939,>2D2D,>3232,>3131,>3636
- DATA >3333,>2E2E,>2020,>4141,>6C6C,>6C6C,>2020,>7272
- DATA >6969,>6767,>6868,>7474,>7373,>2020,>7272,>6565
- DATA >7373,>6565,>7272,>7676,>6565,>6464,>2E2E
-
- DEND
- END
-